package parser;

import exceptions.LexicalException;
import scanner.ScannerFactory;

import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 语法分析器工厂，供外界构造语法分析器
 */
public interface ParserFactory {
    /**
     * 根据指定文件名构造语法分析器
     *
     * @param fileName 指定文件名
     * @return 构造的语法分析器
     * @throws FileNotFoundException 文件路径有错
     * @throws IOException           IO 出错
     * @throws LexicalException      词法分析器无法获得第一个 Token
     */
    static MyParser makeParser(String fileName) throws FileNotFoundException, IOException, LexicalException {
        return new OberonParser(ScannerFactory.makeScanner(fileName));
    }
}
